from typing import List

import pandas as pd

data = [[1, 2, False],
        [2, 3, True],
        [3, 4, False],
        [5, 6, True],
        [6, 7, False],
        [6, 7, False],
        [6, 7, False]]

df = pd.DataFrame(data, columns=[*'abc'])
print(df)


# 遍历 c 列，计数 False，遇到 True 停止计数，遍历完，生成新的一列，这个案例生成值为 1,0,1,0,1,2,3。


def func(ser: pd.Series) -> List:
    """
    处理 c 列，设置一个计数器，
    通过 for 循环对计数器进行赋值，如果连续出现就加一，
    如果出现 True 就还原为 0。
    最后，将调用结果增加到原数据的最后列。
    """
    value: int = 0
    lst: list = []
    for v in ser:
        if v is True:
            value = 0
        else:
            value += 1
        lst.append(value)
    return lst


df = df.assign(d=df["c"].pipe(func))  # 注意用 pipe 应用，传入的是整个 Series
print(df)
